package com.wl.common.system.service.impl;


import com.wl.common.core.web.dto.DataStoreDTO;
import com.wl.common.system.support.dto.*;
import com.wl.common.system.support.dto.query.SysUserQueryDTO;
import com.wl.common.system.support.vo.SysUserVO;
import com.wl.system.api.domain.SysUser;
import com.wl.system.api.model.LoginUser;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;

import java.util.List;
import java.util.Set;

/**
 * @author: wanglin
 * @date: 2023-09-13 周三
 * @Version: 1.0
 * @Description:
 */
public interface SysUserService {
    /**
     * 分页
     *
     * @param pageable
     * @param queryDto
     * @return
     */
    DataStoreDTO<SysUserVO> page(Pageable pageable, SysUserQueryDTO queryDto);

    /**
     * 分页
     *
     * @param pageable
     * @param queryDto
     * @return
     */
    DataStoreDTO<SysUserVO> dataPage(Pageable pageable, SysUserQueryDTO queryDto);

    /**
     * 列表
     *
     * @param sort
     * @param queryDto
     * @return
     */
    List<SysUserVO> list(Sort sort, SysUserQueryDTO queryDto);

    /**
     * 保存
     *
     * @param dto
     */
    void save(SysUserDTO dto);

    /**
     * 更新
     *
     * @param dto
     */
    void update(SysUserDTO dto);

    /**
     * 删除
     *
     * @param ids
     */
    void delete(Set<String> ids);

    /**
     * 查看
     *
     * @param id
     * @return
     */
    SysUserVO get(String id);

    /**
     * 根据用户userId获取用户信息
     *
     * @param userId
     * @return
     */
    SysUser getUserInfo(String userId);

    /**
     * 根据用户userId获取用户信息
     *
     * @param userId
     * @return
     */

    LoginUser getLoginUserInfo(String userId);

    /**
     * 启动或禁用用户——管理员
     *
     * @param userId
     */
//    void updateStatusById(String userId);

    /**
     * 分配角色——管理员
     *
     * @param dto
     */
    void assignRolesById(UserRoleDTO dto);

    /**
     * 根据条件分页查询已分配用户角色列表
     *
     * @param pageable
     * @param queryDto
     * @return
     */
    DataStoreDTO<SysUserVO> selectAllocatedList(Pageable pageable, SysUserQueryDTO queryDto);

    /**
     * 根据条件分页查询未分配用户角色列表
     *
     * @param pageable
     * @param queryDto
     * @return
     */
    DataStoreDTO<SysUserVO> selectUnallocatedList(Pageable pageable, SysUserQueryDTO queryDto);

    /**
     * 取消授权用户/批量取消授权用户
     *
     * @param roleId
     * @param userIds
     */
    void cancelAuthUsers(String roleId, List<String> userIds);

    /**
     * 批量选择授权用户角色
     *
     * @param roleId
     * @param userIds
     */
    void accreditBatchUser(String roleId, List<String> userIds);

    /**
     * 修改个人信息
     *
     * @param dto
     */
    void updateUserProfile(UserProfileDTO dto);

    /**
     * 修改密码
     *
     * @param dto
     */
//    void updateUserPwd(PasswordDTO dto);

    /**
     * 新增
     *
     * @param dto
     */
    void addUser(SysUserDTO dto);

    /**
     * 修改
     *
     * @param dto
     */
    void updateUser(SysUserDTO dto);

    /**
     * 重置用户密码
     *
     * @param dto
     */
//    void resetUserPwd(ResetPasswordDTO dto);

}
